from flask import request, jsonify

from info import constants
from info.response import RET
from .import index_blueprint
from flask import render_template,session,g
from info.models import User, News, Category

"""首页做的事就是查询
要查询的内容
1,用户状态
2,分类信息
3,新闻列表
4,点击排行
"""
@index_blueprint.route('/')
def index():
    #用户状态,设定变量接收从用户保持中查询的用户状态
    user_id = session .get('user_id')
    # 验证用户书否登陆
    if user_id is None:
        g.user = None
    else:
        g.user = User.query.get(user_id).to_login_dict()
     #分类信息.引入分类的信息的类
        # ,吧获取的所有数据转换程字典类型进行输出在分类的类里
    # 1,查询所有的分类表
    category_list1 = Category.query.all()#all返回列表=====>装的[category....]
        #2,然后列表推到式遍历分类的数据然后吧,每个分类对象转成对象,再构成一个列表
    #查到分类后再去index.html让其显示
    category_list2 = [category.to_dict() for category in category_list1]
    #点击排行,要查询的是新闻,所以引入新闻的类,按点击量排序,要找到新闻点击排行字段,
    #用排行字段,点desc 就是降序并吧他引入constants文件,中配置常亮
    news_list1 = News.query.order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS)
    news_list2 = [news.to_click_dict() for news in news_list1]

    # 吧获取的新闻列表放入字典中.

    data = {
        'user' : g.user,
        'category_list' : category_list2,
        'news_list' : news_list2
    }
    return render_template(
        'news/index.html',
        data = data
    )

# 新闻列表的功能逻辑.
# 定义试图,蓝注册蓝图
@index_blueprint.route('/newslist')
def newslist():
    # 逻辑处理:
    # 接收数据
    # 验证数据
    # 处理数据
    # 响应
    #args 用get请求,表示能再页面能显示出来的数据
    #json 请求方式是post
    # 创建三个变量接收,页码值,分类编号,每业新闻数据,
    #看下ajax请求的是什么数据这里就写什么数据
    page = request.args.get('page') #页数
    cid = request.args.get('cid') #分类编号
    per_page = request.args.get('per_page') # 每页的数据

    # 接收到的数据进行验证,验证接收的数据非空
    if not all([page,cid,per_page]):
        return jsonify(errno = RET.NODATA,errmsg = '数据不完整')

    # 处理分页查询,paginate(),查询新闻分类表中的分页字段
    #当选中.最新时,表示不指定分类,查询所有数据,cid=0 表示最新
    pagination = News.query
    if int(cid) != 0:
        pagination = pagination.filter_by(category_id = cid)
    pagination = pagination.order_by(News.id.desc()). \
        paginate(int(page),int(per_page),False)
    #获取当前页的数据
    news_list1 = pagination.items
    #获取总页数
    total_page = pagination.pages
    #将新闻列表转换成html中需要的数据字典
    news_dict_list = [news.to_index_dict() for news in news_list1]

    # 响应,返回字典类型的数据
    data = {
        'errno' : RET.OK,
        'errmsg' : "",
        'cid' : cid,
        'current_page' : page,
        'total_page' : total_page,
        'newsList' : news_dict_list
     }
    #讲字典转换程json数据返回
    return jsonify(data)





